home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 October / PCWorld_2006-10_cd.bin / audio-video / mediamonkey / MediaMonkey_2[1].5.4.977.exe / {app} / Scripts / Export.vbs < prev    next >
Text File  |  2005-06-21  |  16KB  |  560 lines

  1. ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  2. ' This file can be replaced  in one of the future versions,
  3. ' so please if you want to modify it, make  a copy, do your
  4. ' modifications  in that copy and  change Scripts.ini  file 
  5. ' appropriately. 
  6. ' If you do not do this, you will lose  all your changes in
  7. ' this script when you install a new version of MediaMonkey
  8. ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  9.  
  10. Option Explicit     ' report undefined variables, ...
  11.  
  12. ' function for quoting strings
  13. Function QStr( astr)
  14.   QStr = chr(34) & astr & chr(34)
  15. End Function
  16.  
  17. ' function for quoting strings converted to plain ASCII
  18. Function QAStr( astr)
  19.   QAStr = chr(34) & SDB.toASCII(astr) & chr(34)
  20. End Function
  21.  
  22. Dim list      ' list of songs to be exported
  23. Dim res       ' results of dialogs calls
  24. Dim fullfile  ' fully specified output file name
  25. Dim fso       ' FileSystemObject
  26.  
  27. ' SDB variable is connected to MediaMonkey application object
  28.  
  29. Sub InitExport( ext, filter, iniDirValue)
  30.   fullfile = ""
  31.  
  32.   ' Get a list of songs to be exported
  33.   Set list = SDB.CurrentSongList
  34.  
  35.   If list.count=0 Then
  36.     res = SDB.MessageBox( SDB.Localize("Select tracks to be exported, please."), mtError, Array(mbOk))
  37.     Exit Sub
  38.   End If
  39.  
  40.   ' Open inifile and get last used directory
  41.   Dim iniF
  42.   Set iniF = SDB.IniFile
  43.  
  44.   ' Create common dialog and ask where to save the file
  45.   Dim dlg
  46.   Set dlg = SDB.CommonDialog
  47.   dlg.DefaultExt=ext
  48.   dlg.Filter=filter
  49.   dlg.Flags=cdlOFNOverwritePrompt + cdlOFNHideReadOnly + cdlOFNNoChangeDir
  50.   dlg.InitDir = iniF.StringValue( "Scripts", iniDirValue)
  51.   dlg.ShowSave
  52.  
  53.   if Not dlg.Ok Then
  54.     Exit Sub   ' if cancel was pressed, exit
  55.   End If
  56.  
  57.   ' Get the selected filename
  58.   fullfile = dlg.FileName
  59.  
  60.   ' Connect to the FileSystemObject
  61.   Set fso = SDB.Tools.FileSystem
  62.  
  63.   ' Write selected directory to the ini file
  64.   iniF.StringValue( "Scripts", iniDirValue) = fullfile
  65. End Sub
  66.  
  67. Sub FinishExport( ok)
  68.   On Error Resume Next
  69.  
  70.   ' remove the output file if terminated
  71.   if not Ok then
  72.     fso.DeleteFile( fullfile)
  73.   end if
  74. End Sub
  75.  
  76. Sub ExportCSV
  77.   ' initialize export
  78.   Call InitExport (".csv", "CSV (*.csv)|*.csv|All files (*.*)|*.*", _
  79.       "LastExportCSVDir")
  80.   if fullfile="" then
  81.     Exit Sub
  82.   end if
  83.  
  84.   ' Create the output file
  85.   Dim fout
  86.   Set fout = fso.CreateTextFile( fullfile, True)
  87.  
  88.   ' Write header line
  89.   fout.WriteLine Join(Array(SDB.Localize("Artist"),SDB.Localize("Title"), _
  90.     SDB.Localize("Album"),SDB.Localize("Length"),SDB.Localize("Year"), _
  91.     SDB.Localize("Genre"),SDB.Localize("Rating"),SDB.Localize("Bitrate"), _
  92.     SDB.Localize("Path"),SDB.Localize("Media")),",")
  93.  
  94.   ' Use progress to notify user about the current action
  95.   Dim Progress
  96.   Set Progress = SDB.Progress
  97.   Progress.Text = SDB.Localize("Exporting...")
  98.  
  99.   ' Iterate through the list and export all songs
  100.   Progress.MaxValue = list.count
  101.   Dim i, itm
  102.   for i=0 to list.count-1
  103.     Set itm = list.Item(i)
  104.     Dim bitrate
  105.     bitrate = itm.bitrate
  106.     if bitrate>0 then
  107.       bitrate = CStr(Round( bitrate/1000))
  108.     else
  109.       bitrate = ""
  110.     end if
  111.     fout.WriteLine Join( Array( QAStr(itm.ArtistName), QAStr(itm.title), QAStr(itm.AlbumName), _
  112.       QAStr(itm.SongLengthString), CStr(itm.Year), QAStr(itm.Genre), CStr(itm.Rating), CStr(bitrate), _
  113.       QAStr(itm.Path), QAStr(itm.MediaLabel)), ",")
  114.     Progress.Value = i+1
  115.     if Progress.Terminate then
  116.       Exit For
  117.     end if
  118.   next
  119.  
  120.   ' Close the output file and finish
  121.   fout.Close
  122.  
  123.   ' Was it successfull?
  124.   Dim ok
  125.   if Progress.Terminate then
  126.     ok = False
  127.   else
  128.     ok = True
  129.   end if
  130.  
  131.   ' hide progress
  132.   Set Progress = Nothing
  133.  
  134.   Call FinishExport( ok)
  135. End Sub
  136.  
  137.  ' escape XML string
  138. Function MapXML( srcstring)
  139.   srcstring = Replace( srcstring, "&", "&")
  140.   srcstring = Replace( srcstring, "<", "<")
  141.   srcstring = Replace( srcstring, ">", ">")
  142.   Dim i
  143.   i=1
  144.   While i<=Len(srcstring)
  145.     If (AscW(Mid(srcstring, i, 1))>127) Then
  146.       srcstring = Mid( srcstring, 1, i-1)+"&#"+CStr( AscW( Mid( srcstring, i, 1)))+";"+Mid( srcstring, i+1, Len(srcstring))
  147.     End If
  148.     i=i+1
  149.   WEnd
  150.   MapXML = srcstring
  151. End Function
  152.  
  153.  
  154. Sub ExportHTML 
  155.   ' initialize export 
  156.   Call InitExport( ".htm", "HTML (*.htm)|*.htm|All files (*.*)|*.*", _ 
  157.   "LastExportHTMLDir") 
  158.   if fullfile="" then 
  159.   Exit Sub 
  160.   end if 
  161.  
  162.   ' Create the output file 
  163.   Dim fout 
  164.   Set fout = fso.CreateTextFile( fullfile, True) 
  165.  
  166.   ' Write header line 
  167.   fout.WriteLine "<html>" 
  168.   fout.WriteLine "<head><title>" & SDB.Localize("MediaMonkey Track List") & "</title>" 
  169.  
  170.   ' Code to format the document 
  171.   fout.WriteLine "<style type=text/css>" 
  172.   fout.WriteLine "body{font-family:'Verdana',sans-serif; background-color:#FFFFFF; font-size:9pt; color:#000000;}" 
  173.   fout.WriteLine "H1{font-family:'Verdana',sans-serif; font-size:13pt; font-weight:bold; color:#AAAAAA; text-aligh:left}" 
  174.   fout.WriteLine "P{font-family:'Verdana',sans-serif; font-size:9pt; color:#000000;}" 
  175.   fout.WriteLine "TH{font-family:'Verdana',sans-serif; font-size:10pt; font-weight:bold; color:#000000; border-color:#000000; border-style: solid; border-left-width:0px; border-right-width:0px; border-top-width:0px; border-bottom-width:3px;}" 
  176.   fout.WriteLine "TD{font-family:'Verdana',sans-serif; font-size:9pt; color:#000000; border-color:#000000; border-style: solid; border-left-width:0px; border-right-width:0px; border-top-width:0px; border-bottom-width:1px;}" 
  177.   fout.Writeline "TD.dark{background-color:#EEEEEE}" 
  178.   fout.WriteLine "</style>" 
  179.  
  180.   fout.WriteLine "</head><body>" 
  181.   fout.WriteLine "<a href='http://www.mediamonkey.com'><h1>" & SDB.Localize("MediaMonkey Track List")&"</h1></a>" 
  182.  
  183.   ' Headers of table 
  184.   fout.WriteLine "<table cellpadding=4 cellspacing=0>" 
  185.   fout.WriteLine "<tr align=left>" 
  186.   fout.WriteLine " <th id=dark>#</th>" 
  187.   fout.WriteLine " <th>" & SDB.Localize("Artist") & "</th>" 
  188.   fout.WriteLine " <th id=dark>" & SDB.Localize("Title") & "</th>" 
  189.   fout.WriteLine " <th>" & SDB.Localize("Length") & "</th>" 
  190.   fout.WriteLine " <th id=dark>" & SDB.Localize("Album") & "</th>" 
  191.   fout.WriteLine " <th>" & SDB.Localize("Track #") & "</th>" 
  192.   fout.WriteLine " <th id=dark>" & SDB.Localize("Year") & "</th>" 
  193.   fout.WriteLine " <th>" & SDB.Localize("Genre") & "</th>" 
  194.   fout.WriteLine " <th id=dark>" & SDB.Localize("Rating") & "</th>" 
  195.   fout.WriteLine " <th>" & SDB.Localize("Bitrate") & "</th>" 
  196.   fout.WriteLine " <th id=dark>" & SDB.Localize("Media") & "</th>" 
  197.   fout.WriteLine "</tr>" 
  198.  
  199.   ' Use progress to notify user about the current action 
  200.   Dim Progress 
  201.   Set Progress = SDB.Progress 
  202.   Progress.Text = SDB.Localize("Exporting...")
  203.  
  204.   ' Iterate through the list and export all songs 
  205.   Progress.MaxValue = list.count 
  206.   Dim i, itm 
  207.   for i=0 to list.count-1 
  208.     Set itm = list.Item(i) 
  209.     Dim bitrate 
  210.     bitrate = itm.bitrate 
  211.     if bitrate>0 then 
  212.       bitrate = CStr(Round( bitrate/1000)) 
  213.     else 
  214.       bitrate = " " 
  215.     end if 
  216.     Dim year 
  217.     year = itm.year 
  218.     if year<=0 then 
  219.       year = " " 
  220.     else 
  221.       year = CStr( year) 
  222.     end if 
  223.  
  224.     ' Add space to empty fields, so table is displayed correctly (Cell borders do not show up for empty cells) 
  225.     Dim artistname 
  226.     artistname = MapXML(itm.ArtistName)
  227.     if artistname="" then 
  228.       artistname = " " 
  229.     end if 
  230.  
  231.     Dim songtitle 
  232.     songtitle = MapXML(itm.title)
  233.     if songtitle="" then 
  234.       songtitle = " " 
  235.     end if 
  236.  
  237.     Dim albumname 
  238.     albumname = MapXML(itm.AlbumName)
  239.     if albumname="" then 
  240.       albumname = " " 
  241.     end if 
  242.  
  243.     Dim songlength 
  244.     songlength = itm.SongLengthString 
  245.     if songlength="" then 
  246.       songlength = " " 
  247.     end if 
  248.  
  249.     Dim songgenre 
  250.     songgenre = MapXML(itm.Genre)
  251.     if songgenre="" then 
  252.       songgenre = " " 
  253.     end if 
  254.  
  255.     Dim trackorder 
  256.     trackorder = itm.TrackOrder 
  257.     if trackorder="" then 
  258.       trackorder = " " 
  259.     elseif trackorder = "0" then 
  260.       trackorder = " " 
  261.     end if 
  262.  
  263.     ' These are added to get some decent display, all the others haven't, this script is just to demonstrate all the available options 
  264.  
  265.     Dim rating 
  266.     Dim ratingCal
  267.     rating = itm.Rating 
  268.     
  269.     Select Case rating
  270.   Case ""
  271.     ratingCal = " "
  272.   Case -1
  273.     ratingCal = " "
  274.   Case 100
  275.     ratingCal = 5
  276.   Case 90
  277.     ratingCal = 4.5
  278.   Case 80
  279.     ratingCal = 4
  280.   Case 70
  281.     ratingCal = 3.5
  282.   Case 60
  283.     ratingCal = 3
  284.   Case 50
  285.     ratingCal = 2.5
  286.   Case 40
  287.     ratingCal = 2
  288.   Case 30
  289.     ratingCal = 1.5
  290.   Case 20
  291.     ratingCal = 1
  292.   Case 10
  293.     ratingCal = 0.5
  294.   Case 0
  295.     ratingCal = 0
  296.   Case Else
  297.     ratingCal = " "
  298.     End Select
  299.   
  300.     Dim medialabel
  301.     medialabel = MapXML(itm.MediaLabel)
  302.     if medialabel="" then 
  303.       medialabel = " " 
  304.     end if
  305.  
  306.     ' Body of the table 
  307.     fout.WriteLine "<tr><td align=right class=dark>"&i+1&"</td><td>"&artistname&"</td><td class=dark>"&songtitle _ 
  308.     &"</td><td align=right>"&songlength&"</td><td class=dark>"&albumname _ 
  309.     &"</td><td align=right>"&trackorder&"</td><td align=right class=dark>"&Year _ 
  310.     &"</td><td>"&songgenre&"</td><td class=Dark>"&ratingCal&"</td><td align=right>"&bitrate _ 
  311.     &"</td><td align=right class=Dark>"&medialabel&"</td></tr>" 
  312.     Progress.Value = i+1 
  313.     if Progress.Terminate then 
  314.       Exit For 
  315.     end if 
  316.   next 
  317.  
  318.   ' Write some code to finish html document 
  319.   fout.WriteLine "</table><p/><table width=100%><tr>"
  320.   fout.WriteLine "<td style='border-bottom-width:0px'><b>"&SDB.Localize("Total Tracks:")&" </b>"&i&"</td> <td align=right style='border-bottom-width:0px'>Generated by <a href='http://www.mediamonkey.com'>MediaMonkey</a></td>"
  321.   fout.WriteLine "</tr></table></body></html>"
  322.  
  323.   ' Close the output file and finish 
  324.   fout.Close 
  325.  
  326.   ' Was it successfull? 
  327.   Dim ok 
  328.   if Progress.Terminate then 
  329.     ok = False 
  330.   else 
  331.     ok = True 
  332.   end if 
  333.  
  334.   ' hide progress 
  335.   Set Progress = Nothing 
  336.  
  337.   FinishExport( ok) 
  338. End Sub 
  339.  
  340.  
  341. Sub ExportXLS
  342.   ' initialize export
  343.   Call InitExport( ".xls", "Excel sheet (*.xls)|*.xls|All files (*.*)|*.*", _
  344.         "LastExportExcelDir")
  345.   if fullfile="" then
  346.     Exit Sub
  347.   end if
  348.  
  349.   if fso.FileExists( fullfile) then
  350.     fso.DeleteFile( fullfile)
  351.   end if
  352.  
  353.   On Error Resume Next
  354.  
  355.   ' Connect to Excel
  356.   Dim Excel, WB, WS
  357.   Set Excel = CreateObject("Excel.application")
  358.  
  359.   If Err.Number<>0 then
  360.     MsgBox "Microsoft Excel could not be found, please install it and try again."
  361.     Err.Clear
  362.     Exit Sub
  363.   End If
  364.   On Error GoTo 0
  365.  
  366.   ' Create a new workbook and get its worksheet
  367.   Set WB = Excel.WorkBooks.Add
  368.   Set WS = WB.Sheets(1)
  369.  
  370.   ' Use progress to notify user about the current action
  371.   Dim Progress
  372.   Set Progress = SDB.Progress
  373.   Progress.Text = SDB.Localize("Exporting...")
  374.  
  375.   ' Create a header
  376.   WS.Cells(1,1).Value = SDB.Localize("Artist")
  377.   WS.Cells(1,2).Value = SDB.Localize("Album")
  378.   WS.Cells(1,3).Value = SDB.Localize("Title")
  379.   WS.Cells(1,4).Value = SDB.Localize("Length")
  380.   WS.Cells(1,5).Value = SDB.Localize("Year")
  381.   WS.Cells(1,6).Value = SDB.Localize("Genre")
  382.   WS.Cells(1,7).Value = SDB.Localize("Bitrate")
  383.   WS.Cells(1,8).Value = SDB.Localize("Media")
  384.  
  385.   WS.Rows("1:1").Font.Bold = True
  386.  
  387.   Dim ms2Day
  388.   ms2Day = 24*60*60*1000
  389.  
  390.   ' Iterate through the list and export all songs
  391.   Progress.MaxValue = list.count
  392.   Dim i, itm
  393.   for i=0 to list.count-1
  394.     Set itm = list.Item(i)
  395.     Dim bitrate
  396.     bitrate = itm.bitrate
  397.     if bitrate>0 then
  398.       bitrate = CStr(Round( bitrate/1000))
  399.     else
  400.       bitrate = ""
  401.     end if
  402.     Dim year
  403.     year = itm.year
  404.     if year<=0 then
  405.       year = ""
  406.     else
  407.       year = CStr( year)
  408.     end if
  409.  
  410.     WS.Cells(i+2,1).Value = itm.ArtistName
  411.     WS.Cells(i+2,2).Value = itm.AlbumName
  412.     WS.Cells(i+2,3).Value = itm.title
  413.     WS.Cells(i+2,4).NumberFormat = "mm:ss"
  414.     If itm.SongLength>=0 Then
  415.       WS.Cells(i+2,4).Value = itm.SongLength / ms2Day
  416.     End If
  417.     WS.Cells(i+2,5).Value = year
  418.     WS.Cells(i+2,6).Value = itm.Genre
  419.     WS.Cells(i+2,7).Value = bitrate
  420.     WS.Cells(i+2,8).Value = itm.MediaLabel
  421.  
  422.     Progress.Value = i+1
  423.     if Progress.Terminate then
  424.       Exit For
  425.     end if
  426.   next
  427.  
  428.   ' Was it successfull?
  429.   Dim ok
  430.   if Progress.Terminate then
  431.     ok = False
  432.   else
  433.     ok = True
  434.     WB.SaveAs fullfile
  435.   end if
  436.  
  437.   WB.Close false
  438.  
  439.   ' hide progress
  440.   Set Progress = Nothing
  441.  
  442.   FinishExport( ok)
  443. End Sub
  444.  
  445. Sub ExportXML
  446.   ' initialize export
  447.   Call InitExport (".xml", "XML (*.xml)|*.xml|All files (*.*)|*.*", _
  448.       "LastExportXMLDir")
  449.   if fullfile="" then
  450.     Exit Sub
  451.   end if
  452.  
  453.   ' Create the output file
  454.   Dim fout
  455.   Set fout = fso.CreateTextFile( fullfile, True)
  456.  
  457.   ' Use progress to notify user about the current action
  458.   Dim Progress
  459.   Set Progress = SDB.Progress
  460.   Dim ProgressString
  461.   ProgressString = SDB.Localize("Exporting...")
  462.  
  463.   Dim i
  464.   Dim Artists, Artist
  465.   Set Artists = list.Artists
  466.   Dim Albums, Album
  467.   Set Albums = list.Albums
  468.  
  469.   fout.WriteLine "<?xml version='1.0'?>"
  470.   fout.WriteLine "<MusicDatabase>"
  471.  
  472.   Progress.MaxValue = list.count + Artists.Count + Albums.Count
  473.  
  474.   Progress.Text = ProgressString & " (artists)"
  475.   fout.WriteLine "  <Artists>"
  476.   for i=0 to Artists.count-1
  477.     Set Artist = Artists.Item(i)
  478.     fout.WriteLine "    <Artist id=""Artist_"&Artist.id&""">"
  479.     fout.WriteLine "       <Name>" & MapXML(Artist.Name) & "</Name>"
  480.     fout.WriteLine "    </Artist>"
  481.     Progress.Increase
  482.     if Progress.Terminate then
  483.       Exit For
  484.     end if
  485.   next
  486.   fout.WriteLine "  </Artists>"
  487.  
  488.   Progress.Text = ProgressString & " (albums)"
  489.   fout.WriteLine "  <Albums>"
  490.   for i=0 to Albums.count-1
  491.     Set Album = Albums.Item(i)
  492.     fout.WriteLine "    <Album id=""Album_"&Album.id&""">"
  493.     fout.WriteLine "       <PerformingArtist id="""& Album.Artist.id & """>" & MapXML(Album.Artist.Name) & "</PerformingArtist>"
  494.     fout.WriteLine "       <Name>" & MapXML(Album.Name) & "</Name>"
  495.     fout.WriteLine "    </Album>"
  496.     Progress.Increase
  497.     if Progress.Terminate then
  498.       Exit For
  499.     end if
  500.   next
  501.   fout.WriteLine "  </Albums>"
  502.  
  503.   ' Iterate through the list and export all songs
  504.   Progress.Text = ProgressString & " (songs)"
  505.   fout.WriteLine "  <Songs>"
  506.   Progress.MaxValue = list.count
  507.   Dim Song, Media
  508.   for i=0 to list.count-1
  509.     Set Song = list.Item(i)
  510.     fout.WriteLine "    <Song id=""Song_"&Song.id&""">"
  511.     fout.WriteLine "       <Title>" & MapXML(Song.Title) & "</Title>"
  512.     fout.WriteLine "       <PerformingArtist id=""Artist_"& Song.Artist.id & """>" & MapXML(Song.ArtistName) & "</PerformingArtist>"
  513.     fout.WriteLine "       <ContainedInAlbum id=""Album_"& Song.Album.id & """>" & MapXML(Song.AlbumName) & "</ContainedInAlbum>"
  514.     fout.WriteLine "       <SongLength ms="""& Song.SongLength &""">" & MapXML(Song.SongLengthString) & "</SongLength>"
  515.     if Song.Year>0 then
  516.       fout.WriteLine "       <Year value="""& MapXML(Song.Year) &"""/>"
  517.     end if
  518.     if Song.Genre<>"" then
  519.       fout.WriteLine "       <Genre>"& MapXML(Song.Genre) &"</Genre>"
  520.     end if
  521.     fout.WriteLine "       <Bitrate>"& MapXML(Song.Bitrate) &"</Bitrate>"
  522.  
  523.     fout.WriteLine "       <Location>"
  524.     Set Media = Song.Media
  525.     If Not IsNull( Media) And Not IsEmpty( Media) And IsObject( Media) Then
  526.       fout.WriteLine "         <Media id=""Media_"&Media.id&""" sn=""" & _
  527.         Media.SerialNumber & """>"& MapXML(Media.MediaLabel) &"</Media>"
  528.     End If
  529.  
  530.     fout.WriteLine "         <Path>"& MapXML(Song.Path) &"</Path>"
  531.     fout.WriteLine "       </Location>"
  532.  
  533.     fout.WriteLine "    </Song>"
  534.     Progress.Increase
  535.     if Progress.Terminate then
  536.       Exit For
  537.     end if
  538.   next
  539.   fout.WriteLine "  </Songs>"
  540.  
  541.   fout.WriteLine "</MusicDatabase>"
  542.  
  543.   ' Close the output file and finish
  544.   fout.Close
  545.  
  546.   ' Was it successfull?
  547.   Dim ok
  548.   if Progress.Terminate then
  549.     ok = False
  550.   else
  551.     ok = True
  552.   end if
  553.  
  554.   ' hide progress
  555.   Set Progress = Nothing
  556.  
  557.   Call FinishExport( ok)
  558. End Sub
  559.  
  560.